package com.fzrskj.cloud.free.core.tool;

import com.fzrskj.cloud.free.core.enums.PriceTypeEnum;
import ms.core.tool.DateTimeTool;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.SimpleTimeZone;

/**
 * CDateTimeTool.
 *
 * @author zj.
 *         Created on 2018/8/30 0030.
 */
public class CDateTimeTool extends DateTimeTool {
    /**
     * convert long value to Date.
     * @param datetime
     * @return yyyyMMddHHmmss long value
     */
    public static Date intToDateTime(long datetime){
        if (Long.toString(datetime).length()!=14) {
            return null;
        }

        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        try {
            return format.parse(Long.toString(datetime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @Description: 日期天数加方法
     * @Title: datedayAdd
     * @param date 日期基数
     * @param i	加多少天
     * @return String "yyyy-MM-dd"
     */
    public static String getDivDay(Date date, int i) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, i);
        date = calendar.getTime();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        return formatter.format(date);
    }

    /**
     * @Description: 日期加方法
     * @Title: dateAdd
     * @param date 日期基数
     * @param yy	加多少年
     * @param mm	加多少月
     * @param dd	加多少天
     * @return Date 增加之后的日期
     * @see 
     */
    public static Date dateAdd(Date date, int yy, int mm, int dd) {
        Calendar cd = Calendar.getInstance();
        try{
            if (date==null) {
                date = new Date();
            }
            cd.setTime(date);
            cd.add(Calendar.YEAR, yy);//增加yy年
            cd.add(Calendar.MONTH, mm);//增加mm个月
            cd.add(Calendar.DATE, dd);//增加dd天
        }catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return cd.getTime();
    }

    /**
     * 日期根据价格类型相加.
     * @param flag 价格类型.
     * @param inc 新增值.
     * @return
     */
    public static Date dateAdd(String flag, Integer inc) {
        return dateAdd(new Date(), flag, inc);
    }

    /**
     * 日期根据价格类型相加.
     * @param date 起始时间.
     * @param flag 价格类型.
     * @param inc 新增值.
     * @return
     */
    public static Date dateAdd(Date date, String flag, Integer inc) {
        return dateAdd(date, PriceTypeEnum.YEAR.equals(flag) ? inc : 0, PriceTypeEnum.MONTH.equals(flag) ? inc : 0,
                PriceTypeEnum.DAY.equals(flag) ? inc : 0);
    }

    /**
     * 前端到期查询时间格式化。
     * @param endDateType 前端到期时间值.
     * @return Date.
     */
    public static Date getEndDateByType(Integer endDateType) {
        Date endDate = new Date();
        if (endDateType < 2) {
            return endDate;
        } else {
            return dateAdd(endDate, 0, 0, endDateType);
        }
    }

    /**
     * 获取当前UTC时间
     *
     * @param @param date
     * @param @return
     * @return String
     */
    public static String getNowUTCDateTime() {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        df.setTimeZone(new SimpleTimeZone(0, "GMT"));
        return df.format(new Date());
    }

    final public static String TIME_FORMATE_FULL = "yyyy-MM-dd HH:mm:ss";

    public static Integer yearBetween(Date last, Date pre) {
        return daysBetween(last, pre) / 365;
    }
}
